﻿using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetDal.Core.Model
{
    public class Field
    {
        public Table Table { get; set; }
        public string Name { get; set; }
        public string Default { get; set; }
        public bool IsNullable { get; set; }
        public string SqlDataType { get; set; }
        public bool IsIdentity { get; set; }
        public bool IsPrimaryKey { get; set; }
        public Type DotNetType
        {
            get
            {
                switch (SqlDataType.ToLower())
                {
                    case "bigint":
                        return Type.GetType("System.Int64");
                    case "binary":
                        return Type.GetType("System.Byte[]");
                    case "bit":
                        return Type.GetType("System.Boolean");
                    case "char":
                        return Type.GetType("System.String");
                    case "date":
                        return Type.GetType("System.DateTime");
                    case "datetime":
                        return Type.GetType("System.DateTime");
                    case "datetime2":
                        return Type.GetType("System.DateTime2");
                    case "datetimeoffset":
                        return Type.GetType("System.DateTimeOffSet");
                    case "decimal":
                        return Type.GetType("System.Decimal");
                    case "varbinary(max)":
                        return Type.GetType("System.Byte[]");
                    case "float":
                        return Type.GetType("System.Double");
                    case "image":
                        return Type.GetType("System.Byte[]");
                    case "int":
                        return Type.GetType("System.Int32");
                    case "money":
                        return Type.GetType("System.Decimal");
                    case "nchar":
                        return Type.GetType("System.String");
                    case "ntext":
                        return Type.GetType("System.String");
                    case "numeric":
                        return Type.GetType("System.Decimal");
                    case "nvarchar":
                        return Type.GetType("System.String");
                    case "real":
                        return Type.GetType("System.Single");
                    case "rowversion":
                        return Type.GetType("System.Byte[]");
                    case "smalldatetime":
                        return Type.GetType("System.DateTime");
                    case "smallint":
                        return Type.GetType("System.Int16");
                    case "smallmoney":
                        return Type.GetType("System.Decimal");
                    case "sql_variant":
                        return Type.GetType("System.Object");
                    case "text":
                        return Type.GetType("System.String");
                    case "time":
                        return Type.GetType("System.TimeSpan");
                    case "timestamp":
                        return Type.GetType("System.Byte[]");
                    case "tinyint":
                        return Type.GetType("System.Byte");
                    case "uniqueidentifier":
                        return Type.GetType("System.Guid");
                    case "varbinary":
                        return Type.GetType("System.Byte[]");
                    case "varchar":
                        return Type.GetType("System.String");
                    case "xml":
                        return Type.GetType("System.Xml");
                    default:
                        return null;
                }
            }
        }
    }
}
